//Copyright 2012 - Jonathan Allen

using System;
using System.Collections.Generic;
using System.Linq;

namespace Granite.Xaml.Internals
{
	/// <summary>
	/// This is an abstraction over the basic navigation features in WPF, Silverlight, etc.
	/// </summary>
	public interface INavigator
	{
		/// <summary>
		/// Navigate to the indicated URI
		/// </summary>
		/// <param name="target"></param>
		void Navigate(Uri target);

		/// <summary>
		/// Opens a website.
		/// </summary>
		/// <param name="target"></param>
		void OpenWebsite(Uri target);

		/// <summary>
		/// Indicates that GoBack can be safely called.
		/// </summary>
		bool CanGoBack { get; }

		/// <summary>
		/// Indicates that GoForward can be safely called.
		/// </summary>
		bool CanGoForward { get; }

		/// <summary>
		/// Return to the previous View in the navigation journal.
		/// </summary>
		void GoBack();

		/// <summary>
		/// Go to the next view in the navigation journal.
		/// </summary>
		void GoForward();

		/// <summary>
		/// Indicates whether or not websites are included in the journal
		/// </summary>
		bool IncludeWebInNavigation { get;  }
	}
}